public class de {
    public ListNode swapPairs(ListNode head) {
        // 如果链表为空或只有一个节点，直接返回原链表
        if (head == null || head.next == null) {
            return head;
        }

        // 创建虚拟头节点
        ListNode newhead = new ListNode();
        newhead.next = head;
        ListNode prev = newhead;
        ListNode cur = head;

        while (cur != null && cur.next != null) {
            // 保存当前节点的下一个节点
            ListNode nextNode = cur.next;

            // 交换相邻节点
            cur.next = nextNode.next;
            nextNode.next = cur;
            prev.next = nextNode;

            // 更新 prev 和 cur 节点
            prev = cur;
            cur = cur.next;
        }

        return newhead.next;
    }
}
